package com.msb.service.impl;

import com.msb.dao.impl.UserDao;
import com.msb.dao.impl.UserDaoImplB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
//这个Resource注解是以前版本的JDK才好用，现在新版本已经被干掉了，不好使了
//import javax.annotation.Resource;
//解决办法是修改JDK版本为 JDK8 ，方法二是在pom里面添加 dependency
@Service
public class UserServiceImpl implements UserService{
    /*
    * @Autowired
    * 根据类型到容器中去寻找对应的对象，找到后给当前属性赋值，不需要依赖set方法
    * 属性类型可以是接口，会自动匹配对应的实现类对象
    * @Autowired与@Qualifier合作，可以通过名称指定注入的对象
    *
    * @Resource 如果不配置name那么就是根据类型注入
    * @Resource （name="类名"） 那就是根据指定的类名注入
    *
    * @Resource是JDK中javax的注解
    * @Autowired跟@Qualifier是 spring的注解
    *
    * @Value 可以是个普通属性赋值
    * @Value 可以使用 ${} 这种表达式获取系统的变量值
    *           或者是.properties 属性配置文件中的值
    *
    * */

    @Autowired
    @Qualifier ("userDaoImplA") //因为UserDao 有两个子类实现，不指定就无法编译通过
    private UserDao userDao; //指定用上面的 ImplA 来初始化我
    @Autowired //自动推导
    private UserDaoImplB userDaoImplB;
    @Autowired
    @Qualifier("userDaoImplB")
    private UserDao userDaob;

    //Value注解
    @Value("小芳")
    public String name;
    @Value("16")
    public Integer age;
    @Value("${fang_hair}")
    public String hair;
    @Override
    public void add() {
       System.out.println("userServiceImpl add ... ... ");
       userDao.add();
       userDaob.add();
    }

    @Override
    public String toString() {
        return "UserServiceImpl{ name:"+name+" age:"+age+" hair:"+hair+" }";
    }
}
